package com.mihuo.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * Swagger配置类
 *
 * 功能说明：
 * 1. 自动生成RESTful API文档
 * 2. 提供在线API测试界面
 * 3. 支持接口分组和版本管理
 *
 * 访问地址：
 * - Swagger UI界面: http://localhost:8080/swagger-ui.html
 * - JSON格式文档: http://localhost:8080/v2/api-docs
 *
 * @author mihuo
 * @version 1.0
 * @date 2025-09-26
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    /**
     * 是否启用Swagger，通过配置文件动态控制（如：application.yml中的swagger.enabled）
     * 生产环境建议设置为false，避免接口信息暴露
     */
    @Value("${swagger.enabled:true}")
    private boolean enabled;

    /**
     * 创建API文档配置Bean
     * Docket是Swagger的核心配置类，用于定义API文档的生成规则
     */
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.mihuo.controller")) // 指定扫描的包
                .paths(PathSelectors.any())
                .build()
                .enable(enabled)
                .apiInfo(apiInfo());
    }

    /**
     * 配置API文档的基本信息
     * 这些信息会显示在Swagger UI页面的头部位置
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Vanessa 项目API文档")
                .description("Vanessa 项目API文档")
                .version("1.0")
                .build();
    }

}